Erlang Haskell OCaml 23K socket conns на i7640M Спасибо LIONET, LEVGEM, THESZ, NPONECCOP, THEDEEMON, GDS которые показали нам следующее: 1. Все функциональные языки не базирующиеся на JVM подходят для сайтостроительства. 2. Все они показывают сравнимый результат. 3. Веб сервера в среднем в 10 раз быстрее чем веб-фрейморки, значить есть что оптимизировать. 4. Колоичество сокет соединений который могут обслужить решения не равняются их теоретическому пределу. Сокет соединения самое узко веб серверов. Я это делал что бы посмотреть какие есть альтернативы. Они есть и на них можно вполне писать. Очень понравился Ocsigen и действительно думаю что это мне подходит больше чем Хаскель и что либо другое. Конечно на Окамле и Хаскеле нету такой инфраструктуры как на Эрланге, но зато там есть все что нужно для работы. Если брать "Только Сайты" то функциональные языки готовы и могут заменить PHP, Ruby on Rails, Python для сайтостроительства. К сожелению моя брезгливость не позволит нарисовать графики сравнения с ПХП Руби и Питона, однако смысла в этом нет, они проиграют. Зачем выбирать лучшего из худших когда можно наслаждаться лучшими из лучших :) Full Stack Web Site С1К Keep Alive Off Лидер OCaml (даже на одном ядре) теоретический синтетический тест не имеющий практического смысла Хочу напомнить в этом соревновании учавствуют не перекладыватели байтов типа нгникса и веб-серверов используемые в приложения, а полноценные сайты с типизироваными страницами, модулями для парсинга урлов и т.д. с размерами страниц до 3КБ. OCaml/Lwt/Ocsigen: make test.opt wrk -c1000 -r10K -t4 http://rigdzin.cc:8080/ Requests/sec: 3429.36 single node (5163.73 on nginx balanced pair) Erlang/Cowboy/Nitrogen: start.sh wrk -c100 -r5K -t4 http://rigdzin.cc:8000/ Requests/sec: 2042.07 Haskell/Warp/Yesod: ./dist/build/yeso/yeso production +RTS -N4 -A10000000 wrk -c100 -r2K -t4 http://rigdzin.cc:3000/ Requests/sec: 1668.60 Raw Web Server C1K Keep Alive On с референсным NGINX теоретический максимум при 800 сокет соединениях Intel® Core™ i7 CPU M 640 @ 2.80GHz × 4 теоретический синтетический тест Максимальная теоритечиская пропускную способность которую можно зафиксировать на моем ноутбуке и те вызовы с помощью которых они были получены (количество сокет соединений 800). Server Command Max RPS Warp wrk -c 800 -r100k -t 4 -k http://localhost:3000/ 35K Cowboy wrk -c 800 -r100k -t 4 -k http://localhost:8080/ 36K ACME-HTTP wrk -c 800 -r100k -t 4 -k http://localhost:8000/ 60K NGINX wrk -c 800 -r 100k -t 4 -k http://rigdzin.cc/ 70K Придется делать сравнительную таблицу инструментов тестирования wrk, httperf, ab, siege, erlbench, потому что все они выдают разные максимумы для разных учасников эксперимента. Raw Web Server С30K Keep Alive On при миллионах сообщений Все прошли барьер 23К практический результат близкий к реальности К сожаления получить стабильные показатели для Warp было трудно как как иногда wrk для него выдавал 0 RPS с большим количеством таймаутов. Очевидно что у Warp существуют проблемы стабилизации. Cowboy в то же время показывл безошибочные результаты со "smooth" поведением. OCaml уперся во что-то и показал плато в 4К. Хваленый Acme-http (Haskell) показал потолок в 7К несмотря на то, что в С1К показал сумашедшие цифры. Картинка сделана и использованием перлового скрипта LIONET, который я переделал для работы с wrk. Исходники тут: https://github.com/maxlapshin/fpbenchmark